Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

669
Vistas
Error "¿Requerido:Cadena encontrada:Cadena?" Kotlin y Android Studio

Como sugiere el título, aparece un subrayado rojo debajo de "id" en la línea "var myNote = Note(id, title, note, ServerValue.TIMESTAMP)" Error "¿Requerido:Cadena encontrada:Cadena?" Kotlin y Android Studio

 class MainActivity : AppCompatActivity() { var mRef:DatabaseReference? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val database = FirebaseDatabase.getInstance() mRef = database.getReference("Notes") add_new_note.setOnClickListener { showDialogAddNote() } } fun showDialogAddNote() { val alertBuilder = AlertDialog.Builder(this) val view = layoutInflater.inflate(R.layout.add_note, null) alertBuilder.setView(view) val alertDialog = alertBuilder.create() alertDialog.show() view.btnSaveNote.setOnClickListener { val title = view.etTitle.text.toString() val note = view.etNote.text.toString() if (title.isNotEmpty() && note.isNotEmpty()) { var id = mRef!!.push().key var myNote = Note(id, title, note, ServerValue.TIMESTAMP) mRef!!.child(id).setValue(myNote) alertDialog.dismiss() } else { Toast.makeText(this, "Empty", Toast.LENGTH_LONG).show() } } } }

Aquí está mi clase Notes.kt

 package com.example.gearoidodonovan.books import java.util.* class Note (var id:String, var title:String, var note:String, var timestamp: MutableMap<String, String>) { }
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Kotlin te obliga a ser hiperconsciente sobre la nulabilidad.

Su entidad Note dice que requiere una id:String no anulable, y aparentemente, mRef!!.push().key devuelve una String? lo que significa que es una cadena anulable. Puede arreglar esto golpeándolo dos veces, es decir, mReff!!.push().key!!

Otro consejo es ALT+ENTER en estos errores relacionados con Kotlin, te proporcionará el doble golpe.

over 4 years ago · Santiago Trujillo Denunciar

0

Su propiedad de id en Note se declara como String no nula, mientras que la clave que tiene es una String? . Necesitas cerrar esta brecha.

  1. ¡La forma más simple pero más peligrosa es usar !! , que producirá una excepción si la key era nula, es decir

     var id = mRef!!.push().key!!
  2. Una mejor manera es manejar el caso nulo de alguna manera, por ejemplo, realizando una verificación nula:

     var id = mRef!!.push().key if (id != null) { var myNote = Note(id, title, note, ServerValue.TIMESTAMP) mRef!!.child(id).setValue(myNote) alertDialog.dismiss() } else { // handle the case where key is null somehow }
  3. También puede hacer que la propiedad en su propia clase sea anulable y tratar con el valor de ID que podría ser nulo más adelante:

     class Note (var id: String?, var title: String, var note: String, var timestamp: MutableMap<String, String>)

Tenga en cuenta que todos los mRef!! Las llamadas también son problemáticas. Por un lado, la notación húngara (el prefijo m ) generalmente se desaconseja en Kotlin, y el !! el operador también es peligroso. ¡Será mejor que maneje el caso nulo temprano para esa referencia, y luego podría usarlo de manera más conveniente, sin tener que ensuciar su código con !! .

También lo animo a leer sobre seguridad nula en general la documentación oficial o en esta respuesta .

over 4 years ago · Santiago Trujillo Denunciar

0

Puedes usar:

@Suppress("NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS")

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda